package main

import (
	"fmt"
	"log"
	"net/http"
	"os"

	"github.com/gin-gonic/gin"
	"github.com/penglongli/gin-metrics/ginmetrics"
)

func createLogDir(folderPath string) {
	fmt.Println("Привет!")
	// Проверяем существование папки
	if _, err := os.Stat(folderPath); os.IsNotExist(err) {
		fmt.Printf("Папка %s не существует\n", folderPath)

		// Создаем папку
		err := os.MkdirAll(folderPath, 0755)
		if err != nil {
			fmt.Printf("Ошибка при создании папки: %v\n", err)
			return
		}

		fmt.Printf("Папка %s успешно создана\n", folderPath)
	} else {
		fmt.Printf("Папка %s уже существует\n", folderPath)
	}
}

func main() {
	folderPath := "./logs"
	createLogDir(folderPath)

	// Открываем файл для записи логов
	file, err := os.OpenFile("logs/go_service_logs.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	// Устанавливаем логгер для записи в файл
	log.SetOutput(file)

	// Создаем роутер с помощью Gin
	router := gin.Default()

	// get global Monitor object
	m := ginmetrics.GetMonitor()

	// +optional set metric path, default /debug/metrics
	m.SetMetricPath("/metrics")
	// +optional set slow time, default 5s
	m.SetSlowTime(10)
	// +optional set request duration, default {0.1, 0.3, 1.2, 5, 10}
	// used to p95, p99
	m.SetDuration([]float64{0.1, 0.3, 1.2, 5, 10})

	// set middleware for gin
	m.Use(router)

	// Ручка GET /health
	router.GET("/health", func(c *gin.Context) {
		// Записываем лог о вызове метода
		log.Println("GET /health")

		// Возвращаем информацию Ready и Версию
		c.JSON(http.StatusOK, gin.H{
			"status":  "Ready",
			"version": "1.0",
		})
	})

	// Ручка GET /resources
	router.GET("/resources", func(c *gin.Context) {
		// Записываем лог о вызове метода
		log.Println("GET /resources")

		// Дополнительная логика для обработки GET /resources
		// ...

		c.Status(http.StatusOK)
	})

	// Ручка PUT /resources
	router.PUT("/resources", func(c *gin.Context) {
		// Записываем лог о вызове метода
		log.Println("PUT /resources")

		// Дополнительная логика для обработки PUT /resources
		// ...

		c.Status(http.StatusOK)
	})

	// Ручка POST /resources
	router.POST("/resources", func(c *gin.Context) {
		// Записываем лог о вызове метода
		log.Println("POST /resources")

		// Дополнительная логика для обработки POST /resources
		// ...

		c.Status(http.StatusOK)
	})

	// Ручка PATCH /resources
	router.PATCH("/resources", func(c *gin.Context) {
		// Записываем лог о вызове метода
		log.Println("PATCH /resources")

		// Дополнительная логика для обработки PATCH /resources
		// ...

		c.Status(http.StatusOK)
	})

	// Ручка DELETE /resources
	router.DELETE("/resources", func(c *gin.Context) {
		// Записываем лог о вызове метода
		log.Println("DELETE /resources")

		// Дополнительная логика для обработки DELETE /resources
		// ...

		c.Status(http.StatusOK)
	})

	// Запускаем сервер на порту 8080
	if err := router.Run(":8080"); err != nil {
		log.Fatal(err)
	}
}
